<?php
/**
 * 退款 管理
 *
 * @author    Alex Xun xunzhibin@expert.com
 * @version   1.0
 * @copyright (C) 2018 Jnexpert Ltd. All rights reserved
 * @file      pay\controller\v1\Refund.php
 */

namespace app\pay\controller\v1;

use controller\BasicWechat;

/**
 * 退款 控制器类
 *
 * @author Alex Xun xunzhibin@jnexpert.com
 * @package controller
 */
class Refund extends BasicWechat
{
    /**
     * 公众号 第三方库 初始化
     *
     * 根据具体所需服务，实例不同的接口类
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    protected function initVendor()
    {
        // 实例化 第三方库
        $this->wechat = new \WeChat\Pay($this->config);
    }

    /**
     * 申请退款
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function create()
    {
        /**
         * $data = [
         *      // 必需
         *          // 二选一
         *      'transaction_id' => '1008450740201411110005820873',// 微信订单号
         *      'out_trade_no'   => '1217752501201407033233368018',// 商户订单号
         *
         *      'out_refund_no'  => '1217752501201407033233368018',// 商户退款单号
         *      'total_fee'      => '1',//订单总金额
         *      'refund_fee'     => '1',//退款总金额
         *      // 非必需
         *      'refund_fee_type' => 'CNY',// 退款货币种类
         *      'refund_desc' => '商品已售完',// 退款原因
         *      'refund_account' => 'REFUND_SOURCE_RECHARGE_FUNDS',// 退款资金来源
         *      'notify_url' => 'https://weixin.qq.com/notify/',// 退款结果通知url
         * ]
         */

        // 创建订单
        $result = $this->wechat->createRefund($this->data);

        // 响应
        return $this->responsePay($result, true);
    }

    /**
     * 查询退款
     *
     * @author Alex Xun xunzhibin@jnexpert.com
     */
    public function read()
    {
        $options = [
            'transaction_id' => '', // 微信订单号
            'out_trade_no' => '', // 商户订单号
            'out_refund_no' => '', // 商户退款单号
            'refund_id' => ''  // 微信退款单号
        ];
        if(isset($this->param['transaction_id'])) {
            $options['transaction_id'] = $this->data['transaction_id'];
        }
        if(isset($this->param['out_trade_no'])) {
            $options['out_trade_no'] = $this->data['out_trade_no'];
        }
        if(isset($this->param['out_refund_no'])) {
            $options['out_refund_no'] = $this->data['out_refund_no'];
        }
        if(isset($this->param['refund_id'])) {
            $options['refund_id'] = $this->data['refund_id'];
        }
        $options = array_filter($options);

        // 查询
        $result = $this->wechat->queryRefund($options);

        // 响应
        return $this->responsePay($result, true);
    }
}
